package com.xiangxiao.rpan.storage.core;

import com.xiangxiao.rpan.storage.exception.StorageExcetion;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * @auther xiangxiao
 * @email 573768011@qq.com
 * @data 2023/7/31 16:40
 */
public interface StorageProcessor {
  /**
   * 文件存储
   *
   * @param file  输入文件
   * @param suffix      文件名后缀
   * @return 文件存储路径
   * @throws IOException
   */
  String store(MultipartFile file, String suffix) throws IOException;

  /**
   * 文件分片存储
   * @param identifier  文件唯一标识
   * @param chunkNumber 当前分片下标 从1开始
   * @return 文件存储路径
   * @throws IOException
   */
  String storeWithChunk(MultipartFile file, String identifier, Integer totalChunks, Integer chunkNumber, Long totalSize, Long chunkSize, String redisFileDataKey) throws IOException;

  /**
   * 合并各文件分片
   * md5  文件md5标识
   * chunkCount 分片片数
   * suffix 文件后缀名
   * @throws IOException
   * **/
  String mergeChunks(String md5, int chunkCount, String suffix) throws IOException;


  /**
   * 文件下载
   * @param absoluteUrl 绝对路径
   * @param response response响应体
   * */
  String download(String absoluteUrl, HttpServletResponse response) throws  IOException;

  /**
  * 文件分块下载
  * @param bytes 流
    @param response response响应体
  * */
  String downloadWithChunk(byte[] bytes, HttpServletResponse response) throws IOException;

}
